package com.yzion.baselib.view

import android.content.Context
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import androidx.annotation.IntRange
import androidx.appcompat.widget.DrawableUtils
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ColorUtils
import com.blankj.utilcode.util.ResourceUtils
import com.yzion.baselib.widget.titlebar.DefaultTitleBar

/**
 * ZJJ
 * 如果需要自定义全局默认标题栏，请继承该类，如果使用默认样式的标题栏请查看DefaultTitleBar，
 * DefaultTitleBar是继承BaseTitleBar的默认样式的实现
 */
abstract class BaseTitleBar : BaseView {

    //父布局容器
    private var barLayout: ViewGroup? = null

    constructor(context: Context) : super(context)

    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)

    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    )

    override fun initView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) {

    }

    /**
     * 设置标题栏的父容器，该方法在BaseFragment onViewCreated
     * 或者BaseActivity onCreate 里面设置了父容器，一般不用干预
     */
    fun setBarLayout(layout: ViewGroup) {
        barLayout = layout
        setBarBackground(getDefaultBarBackground())
    }

    /**
     * 获取全局默认标题栏背景颜色
     */
    abstract fun getDefaultBarBackground(): Drawable?

    /**
     * 设置标题栏背景颜色
     *
     * @param color
     */
    open fun setBarBackgroundColor(@ColorInt color: Int): BaseTitleBar {
        if (barLayout == null) {
            setBackgroundColor(color)
        } else {
            //实际上是设置父容器的背景颜色
            barLayout!!.setBackgroundColor(color)
        }
        return this
    }

    /**
     * 设置标题栏背景颜色
     */
    open fun setBarBackground(drawable: Drawable?): BaseTitleBar {
        if (barLayout == null) {
            background = drawable
        } else {
            //实际上是设置父容器的背景颜色
            barLayout!!.background = drawable
        }
        return this
    }

    /**
     * 设置标题栏背景透明度
     *
     * @param alpha
     */
    open fun setBarBackgroundAlpha(@IntRange(from = 0, to = 255) alpha: Int): BaseTitleBar {
        barLayout?.background?.mutate()?.alpha = alpha
        return this
    }
}